public class TestDemol {
    public static void main(String[] args){
        int n = 5;
        int ret = factor(n);
        System.out.println(n+"的阶乘为："+ret);
        int num = 1234;
        print(num);
        int num1 = 1729;
        int SUM = sum(num1);
        System.out.println(SUM);
        int num2 = fib(6);
        System.out.println(num2);
    }
    //用递归思想实现N的阶乘：
    public static int factor(int n){
        if(n == 1) return 1;
        return n*factor(n-1);
    }
    //递归练习：按顺序打印一个数字的每一位（1234）：
    public static void print(int num){
        if(num > 9){
            print(num/10);
        }
        System.out.println(num%10);
    }
    //用递归思想，实现输入一个非负整数，返回组成它的数字之和（1729）：
    public static int sum(int num){
        if(num < 10){
            return num;
        }
            return sum(num / 10)+num % 10;
    }
    //求斐波那契数列的第N项和：缺点-》进行了大量的重复运算：
    /*
    public static int fib(int n){
        if(n == 1 || n == 2) return 1;
        return fib(n-1) + fib(n-2);
    }
     */
    //简便方法：运用循环：
    public static int fib(int n){
        if(n == 1 || n == 2) return 1;
        int f1 = 1,f2 = 1,f3 = -1;
        for(int i = 3;i <= n;i++){
            f3 = f1 + f2;
            f1 = f2;
            f2 = f3;
        }
        return f3;
    }

}
